package com.youlian.utils;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.youlian.common.Config;


/**
 * @author  Devin.Hu
 * @date 2011-6-24
 * @version V1.0
 * @description JsonUtils工具类：采用Gson，google的一个开源项目,实现json对象的解析以及json对象跟java对象的互转
 */
public class JsonUtils {

	/**
	 * 将json对象转换成java对象
	 * @param obj
	 * @return
	 * @throws JSONException
	 */
	public static String getJson2String(String jsonData,String key) throws JSONException{

		if(null == key)return null;

        JSONObject obj = new JSONObject(jsonData);
        String value = obj.get(key).toString();
        if(Config.DEBUG)
        	Log.i("parseObj2Json", value);
        return value;
	}

	/**
	 * 将java对象转换成json对象
	 * @param obj
	 * @return
	 */
	public static String parseObj2Json(Object obj){

		if(null == obj)return null;

        Gson gson=new Gson();
        String objstr=gson.toJson(obj);
        if(Config.DEBUG)
        	Log.i("parseObj2Json", objstr);
        return objstr;
	}


	/**
	 * 将java对象的属性转换成json的key
	 * @param obj
	 * @return
	 */
	public static String parseObj2JsonOnField(Object obj){

		if(null == obj)return null;

		Gson gson=new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
        String objstr=gson.toJson(obj);
        if(Config.DEBUG)
        	Log.i("parseObj2JsonOnField", objstr);
        return objstr;
	}

	/**
	 * 将json对象转换成java对象
	 * @param <T>
	 * @param jsonData
	 * @param c
	 * @return
	 */
	public static <T> Object parseJson2Obj(String jsonData, Class<T> c) {

		if(null==jsonData)return null;

		Gson gson = new Gson();
		Object obj = gson.fromJson(jsonData, c);
		if(Config.DEBUG)
        	Log.i("parseJson2Obj", obj.toString());
		return obj;
	}

	/**
	 * 将json对象转换成数组对象
	 * @param <T>
	 * @param jsonData
	 * @param c
	 * @return
	 * @throws JSONException
	 */
	public static <T> ArrayList<T> parseJson2List(String jsonData,Class<T> c) throws JSONException {

		if(null==jsonData || "".equals(jsonData))return null;

		Gson gson = new Gson();
		ArrayList<T> list = new ArrayList<T>();
		JSONArray jsonArray = new JSONArray(jsonData);
		JSONObject objItem = null;
		T objT = null;

		for (int i = 0; i < jsonArray.length(); i++) {
			objItem = (JSONObject) jsonArray.get(i);
			if(null != objItem){
				objT = gson.fromJson(objItem.toString(), c);
				list.add(objT);
			}
	    }

		if(Config.DEBUG)
        	Log.i("parseJson2List", list.toString());
		return list;
	}
}